iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

今天我要來介紹下一個對 NiFi 很重要的 Componenet - Controller Service。只要與第三方的平台、cloud 或 DB 等都需要透過該 Componenet 來做一個對接,才可以將我們要的資料來做一個輸入或是輸出。

什麼是 Controller Service?

如同一開始所提到的,有時候我們會需要從 Database、DatawareHouse 或是雲端的服務來取得資料,進而透過我們在 NiFi 建立的 Data Pipeline 來做一連串的處理步驟,最後在寫入。但是如果同時有多個 Data Pipieline 都需要對同一個 DB 或是一個 Datasource 建立多個連線的話,則對於另一端可能會造成不可預期的影響。所以若能透過同一一個 Object 來建立其中的連線的話,對於 Pipeline 的處理一方面更加單純,另一方面對於提供資料的那一端也不會有太多不必要且重複的網路連線。

這邊我幫各位 Controller Service 底下大概的特性與分類:

  1. 與 DB、Cloud(ex. AWS) 建立連線的設定
  • AWSCredentialsProviderControllerServcie
    可讓使用者設定好 access_key_id, secret_access_key 來存取對應的 AWS 資源
  • DBConnectionPool
    使用者可以指定好 DB 的 JDBC Driver 之路徑classConnection URL,就可以讓 NiFi 對於 DB 來做存取。ex. MySQL, AWS Athena, AWS Redshift等

當然還有很多其他原生提供的 Controller Service,ex. CassandraSessionProvider, RedisConnectionPoolService, HiveConnectionPool, GCPCredentialsControllerService等這些都是比較常用到的,而運作原理也跟我上述的描述雷同。

  1. 讀取或寫入特定 format 的設定
    Controller Service 的另外一種比較常見的用法是針對特定檔案格式的 Reader 和 Writer,讓我們可以去利用對應的檔案格式讀取或寫入檔案:
  • Reader
    常見的有 AvroReader, CsvReader, JsonTreeReader, ParquetReader, XMLReader
  • Writer
    常見的有 AvroRecordSetWriter, CSVRecordSetWriter, JsonRecordSetWriter, ParquetRecordSetWriter, XMLRecordSetWriter

如此一來 NiFi 就可以根據不同的檔案格式去解析與寫入對應的資料檔案。

如何操作?

接下來稍微介紹一下如何去設定 Controller Service,我們可以在主頁的左方的『齒輪符號』:

接者選擇 『CONTROLLER SERVICES』,且點選右手邊的『+』符號:

接著就會跳出所有 Controller Service的種類,與 Processors 的選擇畫面雷同,我們就可以在上面選擇我們要的 Controller Service:

接下來我分兩個場景來簡單介紹一下如何使用:

  1. AWSCredentialsProviderControllerServcie
    這部分都是採用 AWS 相關 Processor 的時候會去用到的,當我們選擇這個 Controller Service 的時候,我們會在剛剛的畫面看到如下結果:

光這樣可是還不夠的,接著我們點選右手邊『齒輪』的符號,會看到如下畫面:

我們會看到一些設定,最基本的我們只要去設定好 Access Key IDSecret Access Key 就可以,其中你會發現當設定完之後 Value 會變成 Sensitive Value set:

那是因為 NiFi 本身會針對一些敏感資料的屬性去做隱藏以及加密,以避免被其他使用者知道真實 value 內容。

當設定完之後按下『APPLY』,我們就可以回到畫面按下『閃電』的符號來作為啟用:

當按下『閃電』的符號時,會看到兩種設定,一個是『Service Only』,代表只單純啟用這個 Controller Service; 另一種是『Service and referencing component』,這是除了啟用之外,也會把相關應用到的 Processor 狀態也 start 起來。

這邊我們選擇最一般的『Service Only』,就會看到 State 欄位從原本的 Disabled 變成 Enabled:

最後,我們任意挑選一個關於 AWS 的 Processor,這邊以『ListS3』為例:

我們會發現紅框也是做同樣的設定,如果每次都要設定 Access Key ID 等資訊就會相對麻煩,而且也會建立很多連線,此時我們可以在橘框選擇對應剛剛設定好的 Controller Service 即可,如此一來就能做使用了。

  1. CSVReader & CSVRecordSetWriter
    這邊以讀取 CSV 的讀取和寫入作為範例,其實在上一篇的 Processor Group 就有稍微帶到,但這邊來做更進一步地說明,一樣我們加入這兩個 Controller Service:

接著可以來稍微看一下內部的設定,首先是 CSVReader:

裡面是一些比較重要的設定,通常我是不太會動它,除非有像是分隔符號改變、schema 改變等才會去動到他。
這邊我也來提一下每一個 Value 所代表的意思:

* Schema Access Strategy: Infer Schema
代表使用檔案的欄位名稱與資料格式作為 Schema
* Value Separator: 分隔符號(default: `,`)
* Record Separator: Record 的分隔符號 (default: `\n`)
* `Treat First line as Header`: 是否要將第一行視為 Header
* Quote Character: 用雙引號來包字串
* Escape Character: 對特定符號解析的 character

CSVRecordSetWriter 也是類似的設定:

接著我們一樣啟用他,那 State 變成 Enabled:

最後我們拿 『SplitRecord』 來做範例,我們可以看到底下就可以設定這兩個 Controller Service,代表 FlowFiles 會以 CSV 的格式來讀取且再經由 CSV 的格式轉換寫入:

小總結

其他相關的用法其實都是大同小異,通常我也是根據我的應用場境來決定適用的 Controller Service,再搭配文件的說明來做適當的設定,只是若能擅長用 Controller Service,對於 Team 來說其實也比較好控管這個對接第三方的 Connection 設定,在後續的場境也會用到其他 Controller Service,期望讀者們能先透過這篇有一個基本的認識與操作。

明天要來講 - Templates, Lables & Funnel,很快就要第10天了,我們再一起努力一下,一定收穫良多的!

Reference


上一篇
Day8 NiFi - Processor Group
下一篇
Day10 NiFi - Templates, Labels & Funnel
系列文
Apache NiFi - 讓你輕鬆設計 Data Pipeline30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言